from attrUtils import 计算会心或破防百分比


def 气魄加成(基础元气: float) -> dict:
    # 气魄每层提升2%的基础元气，最高5层
    提升元气 = 基础元气 * 0.01953 * 5
    return {
        "元气": round(提升元气, 0),
        "毒性内功破防数值": round(0.3 * 提升元气, 0),
        "最终毒性内功破防数值": round(0.3 * 提升元气, 0),
        "毒性内功破防": round(计算会心或破防百分比(0.3 * 提升元气), 4),
        "基础攻击": round(0.18 * 提升元气, 0),
        "最终攻击": round(0.18 * 提升元气 + 1.75 * 提升元气, 0),
        "外功会心数值": round(0.57 * 提升元气, 0),
        "外功会心": round(计算会心或破防百分比(0.57 * 提升元气), 4)
    }


def 秋风加成() -> dict:
    return {
        "外功会心": 0.1,
        "外功会效": 0.096,
    }


def 套装神力加成() -> dict:
    return {
        "外功会心": 0.04004,
        "外功会效": 0.04004,
    }


def 套装暴雨加成() -> dict:
    return {
        "本体增伤": 0.1,
    }


def 套装天绝加成() -> dict:
    return {
        "本体增伤": 0.2,
    }


def 杨威加成(基础攻击: float) -> dict:
    return {
        "最终攻击": 基础攻击 * 0.5
    }


def 心无加成() -> dict:
    return {
        "外功会心": 0.15,
        "外功会效": 0.30
    }


def 水灭虚加成(满层数值: float) -> dict:
    return {
        "基础攻击": 满层数值,
        "最终攻击": 满层数值,
    }


def 风灭虚加成(数值: float) -> dict:
    return {
        "毒性内功破防数值": 数值,
        "最终毒性内功破防数值": 数值,
        "毒性内功破防": round(计算会心或破防百分比(数值), 4)
    }


def 弩心加成(毒性内功破防数值: float) -> dict:
    return {
        # "毒性内功破防数值": 毒性内功破防数值 * 0.15039,
        "最终毒性内功破防数值": 毒性内功破防数值 * 0.15039,
        "毒性内功破防": round(计算会心或破防百分比(毒性内功破防数值 * 0.15039), 4)
    }


def 催寒加成() -> dict:
    return {
        "无视防御A": 0.40039
    }


def 擘两分星80以下加成() -> dict:
    return {
        "本体增伤": 0.2002
    }


def 擘两分星20以上加成(攻击系数: float) -> dict:
    return {
        "攻击系数": 攻击系数 * 0.1
    }


def 腰带大附魔加成(type: str) -> dict:
    # 1是1%， 2是5%
    if type == "1":
        return {
            "本体增伤": 0.00977
        }
    elif type == "2":
        return {
            "本体增伤": 0.0498
        }
    elif type == "期望":
        return {
            "本体增伤": 0.00977 * 0.7 + 0.0498 * 0.3
        }


def 杀机断魂暗藏增伤(千机变数量: float) -> dict:
    return {
        "本体增伤": 0.10059 * 3 * 千机变数量
    }


def 杀机断魂连弩增伤(天绝数量: float) -> dict:
    return {
        "本体增伤": 0.10059 * 天绝数量
    }


def 杀机断魂天绝增伤(暗藏数量: float) -> dict:
    return {
        "本体增伤": 0.10059 * 2 * 暗藏数量
    }


def 流星赶月() -> dict:
    return {
        "外功会心": 0.1,
        "外功会效": 0.1,
    }


def 化血迷心() -> dict:
    return {
        "本体增伤": 1
    }


def 蚀肌弹秘籍() -> dict:
    return {
        "本体增伤": (4 + 5) / 100,
        "外功会心": (0) / 100,
    }


def 天绝地灭秘籍() -> dict:
    return {
        "本体增伤": (3 + 4 + 5) / 100,
    }


def 图穷匕见秘籍() -> dict:
    return {
        "本体增伤": (3 + 4 + 5) / 100,
        "外功会心": (2) / 100,
    }


def 暴雨梨花针秘籍() -> dict:
    return {
        "本体增伤": (4 + 5) / 100,
        "外功会心": (4) / 100,
    }


def 添加面板增益(面板属性: dict, 增益: dict, 覆盖率: float = 1) -> dict:
    for key, value in 增益.items():
        if 面板属性.get(key, "none") != "none":
            面板属性[key] = 面板属性[key] + value * 覆盖率
    return 面板属性


def 添加技能增益(技能系数: dict, 增益: dict, 覆盖率: float = 1) -> dict:
    for key, value in 增益.items():
        if 技能系数.get(key, "none") != "none":
            技能系数[key] = 技能系数[key] + value * 覆盖率
    return 技能系数


def 方法_技能嵌入总面板(总面板:dict, 技能系数表: dict) -> dict:
    for key, value in 技能系数表.items():
        if 总面板.get(key, "none") != "none":
            # 不为空说明已经嵌入了空表，直接加法
            总面板[key] = 总面板[key] + value
        else:
            # 为空说明没嵌入空表，正常组合即可。
            总面板[key] = value
    return 总面板
